package com.basin.common.mybatisplus.handler;

import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.basin.common.satoken.support.BasinAuthTool;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;

import java.sql.Timestamp;

/**
 * @author: Sam ZHONG | sammy1997@aliyun.com
 */
@Slf4j
public class AutoFillHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("---mp拦截器注入insertSql");
        Object loginId = getLoginId();
        if (!ObjectUtil.isEmpty(loginId)) {
            // 创建人
            this.setFieldValByName(MpConst.CREATE_USER, loginId, metaObject);
            // 更新人
            this.setFieldValByName(MpConst.UPDATE_USER, loginId, metaObject);
        }

        Timestamp timestamp = new Timestamp(System.currentTimeMillis());
        // 创建时间
        this.setFieldValByName(MpConst.CREATE_TIME, timestamp, metaObject);
        // 更新时间
        this.setFieldValByName(MpConst.UPDATE_TIME, timestamp, metaObject);
        // 初始状态
        this.setFieldValByName(MpConst.STATUS, StatusConst.ENABLE, metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("---mp拦截器注入updateSql");
        // 更新人
        Object loginId = getLoginId();
        if (!ObjectUtil.isEmpty(loginId)) {
            this.setFieldValByName(MpConst.UPDATE_USER, loginId, metaObject);
        }
        // 更新时间
        this.setFieldValByName(MpConst.UPDATE_TIME, new Timestamp(System.currentTimeMillis()), metaObject);
    }

    private static String getLoginId() {
        // 操作人编码 默认没有
        String loginId = "";
        try {
            loginId = BasinAuthTool.getLoginId();
        } catch (Exception e) {
            log.error("获取登录人失败 --> {}", e.getMessage());
        }
        return loginId;
    }
}
